import request from './index'

/**
 * 聊天会话和消息历史相关 API
 */
export const chatApi = {
  /**
   * 创建新会话
   * @param {Object} data - 会话数据，包含 user_id
   * @returns {Promise} - 返回创建的会话信息
   */
  createConversation(data) {
    console.log('创建会话数据(原始):', JSON.stringify(data));
    
    // 转换字段名：驼峰命名法 -> 下划线命名法
    const convertedData = { ...data };
    
    if (convertedData.userId !== undefined) {
      convertedData.user_id = convertedData.userId;
      delete convertedData.userId;
    }
    
    console.log('创建会话数据(转换后):', JSON.stringify(convertedData));
    
    return request({
      url: '/chat/conversations',
      method: 'post',
      data: convertedData
    })
  },

  /**
   * 获取用户会话列表
   * @param {Number} userId - 用户ID
   * @param {Number} page - 页码，默认1
   * @param {Number} pageSize - 每页数量，默认10
   * @returns {Promise} - 返回会话列表
   */
  getConversations(params) {
    return request({
      url: '/chat/conversations',
      method: 'get',
      params: params
    })
  },

  /**
   * 获取会话详情
   * @param {Number} conversationId - 会话ID
   * @returns {Promise} - 返回会话详情
   */
  getConversation(conversationId) {
    return request({
      url: `/chat/conversations/${conversationId}`,
      method: 'get'
    })
  },

  /**
   * 更新会话信息
   * @param {Number} conversationId - 会话ID
   * @param {Object} data - 更新的数据
   * @returns {Promise} - 返回更新结果
   */
  updateConversation(conversationId, data) {
    return request({
      url: `/chat/conversations/${conversationId}`,
      method: 'put',
      data
    })
  },

  /**
   * 删除会话
   * @param {Number} conversationId - 会话ID
   * @returns {Promise} - 返回删除结果
   */
  deleteConversation(conversationId) {
    return request({
      url: `/chat/conversations/${conversationId}`,
      method: 'delete'
    })
  },

  /**
   * 发送消息
   * @param {Object} data - 消息数据
   * @returns {Promise} - 返回创建的消息
   */
  sendMessage(data) {
    console.log('发送消息数据(原始):', JSON.stringify(data));
    
    // 验证必要字段
    if (!data.conversationId) {
      console.error('发送消息错误: 缺少conversationId字段');
      return Promise.reject(new Error('缺少会话ID'));
    }
    
    if (!data.userId) {
      console.error('发送消息错误: 缺少userId字段');
      return Promise.reject(new Error('缺少用户ID'));
    }
    
    if (!data.role) {
      console.error('发送消息错误: 缺少role字段');
      return Promise.reject(new Error('缺少角色信息'));
    }
    
    if (!data.content) {
      console.error('发送消息错误: 缺少content字段');
      return Promise.reject(new Error('缺少消息内容'));
    }
    
    // 转换字段名：驼峰命名法 -> 下划线命名法
    const convertedData = { ...data };
    
    // 特别处理这些字段
    if (convertedData.conversationId !== undefined) {
      convertedData.conversation_id = convertedData.conversationId;
      delete convertedData.conversationId;
    }
    
    if (convertedData.userId !== undefined) {
      convertedData.user_id = convertedData.userId;
      delete convertedData.userId;
    }
    
    if (convertedData.contentType !== undefined) {
      convertedData.content_type = convertedData.contentType;
      delete convertedData.contentType;
    } else {
      // 默认为文本类型
      convertedData.content_type = 'text';
    }
    
    console.log('发送消息数据(转换后):', JSON.stringify(convertedData));
    
    return request({
      url: '/chat/messages',
      method: 'post',
      data: convertedData
    })
  },

  /**
   * 获取会话消息历史
   * @param {Object} params - 参数对象，包含 conversation_id
   * @returns {Promise} - 返回消息列表
   */
  getMessages(params) {
    return request({
      url: '/chat/messages',
      method: 'get',
      params: params
    })
  },

  /**
   * 搜索消息
   * @param {Number} userId - 用户ID
   * @param {String} keyword - 搜索关键词
   * @param {Number} page - 页码，默认1
   * @param {Number} pageSize - 每页数量，默认20
   * @returns {Promise} - 返回搜索结果
   */
  searchMessages(userId, keyword, page = 1, pageSize = 20) {
    return request({
      url: '/chat/messages/search',
      method: 'get',
      params: {
        user_id: userId,
        keyword,
        page,
        page_size: pageSize
      }
    })
  }
} 